/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package proyectoarboles;

import java.awt.Graphics;

/**
 * Clase para dibujar el plano
 * @author Lucho
 */
public class Plano {

    /**
     * Método para dibujar el plano de corte de acuerdo al nodo ingresado, y los puntos
     * superior izquierdo y el punto medio de la derech
     * @param graphics
     * @param nodo
     * @param puntoSuperiorIzquierda
     * @param puntoInferiorDerecha
     */
    public void dibujarPlanoPorNodo(Graphics graphics,Nodo nodo,Punto puntoSuperiorIzquierda,Punto puntoInferiorDerecha){
        if(nodo != null){
            Punto puntoCentro = getPuntoCentro(puntoSuperiorIzquierda,puntoInferiorDerecha);
            if(!nodo.esNodoHoja()){
                switch (nodo.getDato()) {
                    case "-":
                        //graphics.drawLine(puntoSuperiorIzquierda.coordenadaX, puntoCentro.coordenadaY, puntoInferiorDerecha.coordenadaX, puntoCentro.coordenadaY);
                        graphics.drawLine(puntoSuperiorIzquierda.coordenadaX, puntoCentro.coordenadaY, puntoInferiorDerecha.coordenadaX, puntoCentro.coordenadaY);
                        dibujarPlanoPorNodo(graphics, nodo.getDerecha(), puntoSuperiorIzquierda, new Punto(puntoInferiorDerecha.coordenadaX, puntoCentro.coordenadaY));
                        dibujarPlanoPorNodo(graphics, nodo.getIzquierda(), new Punto(puntoSuperiorIzquierda.coordenadaX, puntoCentro.coordenadaY), puntoInferiorDerecha);
                        break;
                    case "|":
                        //graphics.drawLine(puntoCentro.coordenadaX, puntoSuperiorIzquierda.coordenadaY, puntoCentro.coordenadaX, puntoInferiorDerecha.coordenadaY);
                        graphics.drawLine(puntoCentro.coordenadaX, puntoSuperiorIzquierda.coordenadaY, puntoCentro.coordenadaX, puntoInferiorDerecha.coordenadaY);
                        dibujarPlanoPorNodo(graphics, nodo.getIzquierda(), puntoSuperiorIzquierda, new Punto(puntoCentro.coordenadaX, puntoInferiorDerecha.coordenadaY));
                        dibujarPlanoPorNodo(graphics, nodo.getDerecha(), new Punto(puntoCentro.coordenadaX, puntoSuperiorIzquierda.coordenadaY), puntoInferiorDerecha);
                        break;
                }
            }else{
                graphics.drawString("" + nodo.getDato(),puntoCentro.coordenadaX, puntoCentro.coordenadaY);
            }
        }
    }

    /**
     * Método para crear un punto en el centro, a partir los puntos ingresados como parametro
     * @param puntoSuperiorIzquierdo
     * @param puntoInferiorDerecha
     * @return Punto central del plano
     */
    private Punto getPuntoCentro(Punto puntoSuperiorIzquierdo, Punto puntoInferiorDerecha){
            int nuevaY = ((puntoInferiorDerecha.coordenadaY - puntoSuperiorIzquierdo.coordenadaY) / 2) + puntoSuperiorIzquierdo.coordenadaY;
            int nuevaX = ((puntoInferiorDerecha.coordenadaX - puntoSuperiorIzquierdo.coordenadaX) / 2) + puntoSuperiorIzquierdo.coordenadaX;
            return new Punto(nuevaX,nuevaY);
    }
}
